Skip to content

jenkins-faq

jenkins-faq

Workflow &Airflow

bash
1、jenskins属于workflow。(但基本工程软件领域,jenbkins已经足够了)2、Airflow:适用于机器学习领域,pythn写的,可支持几百个或上千个阶段。

jenkins里报错排查方法

  • 错误代码

image-20230408103734739

image-20230408103841510

  • 正确代码(这里是没逗号的。)

image-20230408103924569


  • 看这里就行

image-20240619101633360

jenkins使用公共账号去拉代码

image-20230408161543474

jar包命名规范

image-20230408161513364

JsonPath语法文档

https:/data/devops6/jenkins_home[root@Devops6 jenkins_home]#lsconfig.xmlhudson.model.UpdateCenter.xmljenkins.install.InstallUtil.lastExecVersionjenkins.model.JenkinsLocationConfiguration.xmljobsnodeMonitors.xmlpluginssecret.keysecretsuserContentwarcopy_reference_file.logidentity.key.encjenkins.install.UpgradeWizard.statejenkins.telemetry.Correlator.xmllogsnodesqueue.xml.baksecret.key.not-so-secretupdatesusers[root@Devops6 jenkins_home]#cd nodes/[root@Devops6 nodes]#lsbuild01[root@Devops6 nodes]#cd build01/[root@Devops6 build01]#lsconfig.xml[root@Devops6 build01]#cat config.xml <?xml version='1.1'encoding='UTF-8'?><slave><name>build01</name><description>myfirstnode</description><remoteFS>/opt/jenkinsagent</remoteFS><numExecutors>5</numExecutors><mode>EXCLUSIVE</mode><retentionStrategyclass="hudson.slaves.RetentionStrategy$Always"/><launcherclass="hudson.slaves.JNLPLauncher"><workDirSettings><disabled>false</disabled><internalDir>remoting</internalDir><failIfWorkDirIsMissing>false</failIfWorkDirIsMissing></workDirSettings><webSocket>false</webSocket></launcher><label>buildmavengolang</label><nodeProperties/></slave>[root@Devops6 build01]#

注意:之前在agent web上配置的参数就是这里的config.xml 内容

image-20230320212432110

image-20230320212716005

image-20230320212828941

image-20230320213002216

image-20230320212937082

image-20230320213054893

image-20230320213107809

image-20230320213116906

image-20230320213132183

可以看到,这里的触发器数量变成6个了,符合预期。

Jenkins高可用

通过HA proxy来创建多个jenkins,但最后会发现有一个问题:2个Jenkins读的数据是不能同时加载的。也就是说这个本地数据目录只支持一个Jenkins

后来我们做的方式,比如这个Jenkins挂了,那么另外一个jenbkins会reload一下这个数据,那么就可以拿到这个数据了。

但是,现在也没必要做Jenkins高可用了,直接把它放在k8s里,出了问题,它会直接给你启动。

高可用还有一种情况,就是我们把agent给忽略掉。你可以理解为Jenkins就没有agent。比如起一个任务,我们就给他起一个jebnkins master,然后去构建这个任务。这也是一种调度的实践方式吧。那这样子的话,jenkins也不需要去存储它的数据了。

还有一种,就是把jenkins所有配置放在自己的平台上面。把jenkins做成无状态的,它挂了也无所谓。重新启动就可以,只把它作为一个引擎,只让它去运行任务就可以了。所有的数据都在外面存储。

所以说,还是它存储这一块不太给力,如果它有数据库的话,可能会更好一些。

Jenkins更新最佳实践

最佳实践:

在企业里,我们会对Jenkins做版本管理。Jenkins有个configAsCode这个插件,它可以支持你通过一个类似于yaml文件,启动的时候,它会按照yaml文件里定义的内容去做一些配置。

我们没用这种方式,我们直接用的是一个dockerfile,直接建的那个repo,会定时的去打这样一个镜像。需要哪些插件,我就会写到这个插件目录,然后build一个镜像。直接去启这个镜像。

因为configAsCode这个插件有时候会出现一些问题,比如说加载的问题,还有一个就是你在启动的时候,它会应用这些配置,有可能会导致启动失败。

所以,我们干脆打成docker镜像,经过测试之后,直接用这个镜像去起master,去更新就可以了。

这也是关于jenkins更新的一个实践。

范例:如何取消被卡主的job呢?

image-20240616213632621

这里输入kill就好:

image-20240616213654709

点击Retry using POST:

image-20240616213724622

可以看到:job被取消了

image-20240616213823157

Q:为什么关闭默认的checkout, 默认的checkout有什么问题吗

默认的checkout不会判断项目,只根据git地址下载。建议还是skip它。

Q:老师,jenkins的In-process Script Approval是干嘛用的。每次我执行都让我确认

这个是jenkins的安全限制,防止一些高危的代码执行。但是后台可以审批通过后就可以执行了。

(这个自己还没遇见过哦……)

最近更新